/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.compra.controlador;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.clases.cVarios;
import sv.com.intesal.compra.bean.AbonoCompra;
import sv.com.intesal.compra.sql.SQLAbonoCompra;
import sv.com.intesal.conexion.cConexion;
import sv.com.intesal.seguridad.controlador.BitacoraControlador;
import sv.com.intesal.seguridad.controlador.SessionControlador;

/**
 *
 * @author ejerez
 */
public class AbonoCompraControlador {

    public void setAbonoCompra(AbonoCompra ac) throws Exception {

        PreparedStatement ps = null;
        Connection cnn = null;

        SessionControlador sc = new SessionControlador();
        try {
            cnn = cConexion.conectar();

            if (ac.getId_ac() == null) {
                ps = cnn.prepareCall(SQLAbonoCompra.insertAbonoCompra);
                ps.setInt(1, ac.getId_c());
                ps.setInt(2, sc.getCodigo_Usuario());
                ps.setDate(3, cVarios.getFecha(ac.getFecha_ac()));
                ps.setDouble(4, ac.getMonto_ac());
                ps.setString(5, "AC");
                ps.setString(6, "");
                ps.executeUpdate();
            } else {
                ps = cnn.prepareCall(SQLAbonoCompra.updateAbonoCompra);
                ps.setInt(1, ac.getId_c());
                ps.setDate(2, cVarios.getFecha(ac.getFecha_ac()));
                ps.setDouble(3, ac.getMonto_ac());
                ps.setString(4, "AC");
                ps.setString(5, "");
                ps.setInt(6, ac.getId_ac());
                ps.executeUpdate();
            }

            cnn.close();
            ps.close();

            Mensaje m = new Mensaje();
            if (ac.getId_ac() == null) {
                m.messageInfo(m.getIinformation());
            } else {
                m.messageInfo(m.getImodificada());
            }
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void setEstado(Integer codigo_ac, String estado) throws Exception {

        Connection cnn = null;
        PreparedStatement ps = null;
        try {
            cnn = cConexion.conectar();
            ps = cnn.prepareCall(SQLAbonoCompra.setEstado);
            ps.setString(1, estado);
            ps.setInt(2, codigo_ac);
            ps.executeUpdate();

            cnn.close();
            ps.close();
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public Integer getMax() throws Exception {
        try {
            ResultSet rs = cConexion.conectar().prepareCall(SQLAbonoCompra.getMax).executeQuery();
            rs.next();
            return rs.getInt("max");
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public List<AbonoCompra> getAbonos(Integer codigo_c) throws Exception {

        List<AbonoCompra> lista = new ArrayList<AbonoCompra>();
        PreparedStatement ps = null;
        Connection cnn = null;
        ResultSet rs = null;
        try {
            cnn = cConexion.conectar();
            ps = cnn.prepareCall(SQLAbonoCompra.getAbonos_x_Compra);
            ps.setInt(1, codigo_c);
            rs = ps.executeQuery();

            while (rs.next()) {
                AbonoCompra ac = new AbonoCompra();

                ac.setId_ac(rs.getInt("id_ac"));

                ac.setFecha_ac(rs.getDate("fecha_ac"));
                ac.setFechahora(rs.getTimestamp("fechahora"));
                ac.setMonto_ac(rs.getDouble("monto_ac"));
                ac.setEstado_ac(rs.getString("estado_ac"));
                ac.setNumero_documento_ac(rs.getString("numero_documento_ac"));

                /*USUARIO*/
                ac.setId_u(rs.getInt("id_u"));
                ac.setUsuario_u(rs.getString("usuario_u"));
                lista.add(ac);
            }
            cnn.close();
            rs.close();
            ps.close();

            return lista;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void setEliminarAbono(AbonoCompra ac) throws Exception {

        Connection cnn = null;
        PreparedStatement ps = null;
        try {
            cnn = cConexion.conectar();
            ps = cnn.prepareCall(SQLAbonoCompra.deleteAbonoCompra);
            ps.setInt(1, ac.getId_ac());
            ps.executeUpdate();
            BitacoraControlador bc = new BitacoraControlador();
            bc.setBitacoraAnulacion(ac.getId_ac(), bc.eliminarItemAbonoCompra + ": " + ac.getNumero_documento_ac() + " , Monto: + " + ac.getMonto_ac(), bc.eliminarItemAbonoCompra);

            Mensaje m = new Mensaje();
            m.messageInfo(m.getIeliminada());

            ps.close();
            cnn.close();

        } catch (Exception e) {
            throw new Exception(e);
        }

    }

    public Double getSuma_AbonoCompra(Integer codigo_c) throws Exception {

        Connection cnn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            cnn = cConexion.conectar();
            ps = cnn.prepareStatement(SQLAbonoCompra.getSumaAbonos_x_Compra);
            ps.setInt(1, codigo_c);
            rs = ps.executeQuery();

            rs.next();
            return rs.getDouble("Total_Abono");
        } catch (Exception e) {
            throw new Exception(e);
        }
    }
}
